# encoding: utf-8
"""
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    created by siyi.chen on '13/03/2025'
    comment: 消息中心
"""
from fastapi import APIRouter, Query, Request, Body

from config import Config
from project.core.function import json_response
from project.lib.decorator import api_common, exec_duration
from project.model.database.message import MessageDevice
from project.service.message import MessageService
from project.service.record import RecordService


message_router = APIRouter(prefix='/c', tags=['cariabot.message'])


@message_router.get('/message/list', summary='消息列表')
@api_common(doc_replace=(('{0}', Config.ENV_DOC_FIX),), dev_info=True)
@exec_duration(add_return=True)
async def get_message_list(request: Request, session=None, device=None):
    """
    **desc**: 消息列表

    **url**: http(s)://{0}.udicaria.com/c/message/list

    **method**: GET

    **params**:

    **return**:json数据结构::

        {
            code: 0(成功)/非0(失败)
            message: 成功返回success, 否则返回error信息
            data: {
                unread_count: 未读消息数量
                combined_list: [
                    {
                        type: 类型 flow
                        code: 服务记录编号
                        icon: 服务图标
                        flow_name: 服务名称
                        flow_process_name: 当前节点
                        status: 当前服务状态 init(待完成)/success(已完成)/cancel(已取消)
                        status_list: 服务状态列表
                        flow_time: {
                            date: 服务日期 today(今日)/tomorrow(明日)/after_tomorrow(后日)
                            time: 服务时间
                        } 预计服务时间
                        appoint_time: 预约时间 - flow_time的TIMESTAMP格式
                        is_timeout: 是否超时
                        update_time: 更新时间
                    },
                    {
                        type: 类型 activity
                        content: {
                            第三方系统自定义json数据
                        } 消息内容
                        title: 消息标题
                        type: 消息类型
                        update_time: 更新时间
                        voice: 语音播报
                        id: 消息id
                    }
                ] 服务列表+消息列表
            }
            exec_time: 接口后端处理时长
        }
    """
    flow_data = await RecordService.get_flow_record_list(session, device=device)

    message_data = await MessageService.get_message_list(session, device=device)

    # 为每个元素添加类型字段
    flow_list_with_type = [{"type": "flow", **item} for item in flow_data]
    # message_list_with_type = [{"type": "message", **item} for item in message_data]

    # 合并两个列表
    combined_list = flow_list_with_type + message_data

    # 按照 update_time 排序（降序）
    combined_list.sort(key=lambda x: x["update_time"], reverse=True)

    ret_data = {
        'unread_count': len(message_data),
        'combined_list': combined_list
    }

    return json_response(data=ret_data)


@message_router.post('/message/read', summary='消息已读')
@api_common(doc_replace=(('{0}', Config.ENV_DOC_FIX),), dev_info=True)
@exec_duration(add_return=True)
async def read_message(request: Request, session=None, message_id: int = Body(..., title='消息id', embed=True), device=None):
    """
    **desc**: 消息已读

    **url**: http(s)://{0}.udicaria.com/c/message/read

    **method**: POST

    **params**:

        <body>:
            message_id: 消息id

    **return**:json数据结构::

        {
            code: 0(成功)/非0(失败)
            message: 成功返回success, 否则返回error信息
            data:
            exec_time: 接口后端处理时长
        }
    """
    await MessageDevice.create_modify(session, wheres=(MessageDevice.message_id == message_id, MessageDevice.dev_id == device.dev_id),
                                      message_id=message_id,
                                      dev_id=device.dev_id)

    return json_response()